// 从 electron 模块导入所需的 API
import { app, shell, BrowserWindow, ipcMain, Tray, Menu } from 'electron';
// 从 path 模块导入 join 方法，用于处理文件路径
import { join } from 'path';
// 从 @electron-toolkit/utils 模块导入相关工具函数和常量
import { electronApp, optimizer, is } from '@electron-toolkit/utils';
// 导入应用程序图标，这里使用了 Vite 的资源导入语法
import icon from '../../resources/icon.png?asset';

// 声明一个全局变量 mainWindow，用于存储主窗口实例
let mainWindow: BrowserWindow;

function createWindow() {
  // 创建浏览器窗口实例
  mainWindow = new BrowserWindow({
    // 设置窗口宽度为 900 像素
    width: 900,
    // 设置窗口高度为 670 像素
    height: 670,
    // 初始时不显示窗口
    show: false,
    // 自动隐藏菜单栏
    autoHideMenuBar: true,
    // 如果是 Linux 平台，则设置窗口图标
    ...(process.platform === 'linux' ? { icon } : {}),
    webPreferences: {
      // 指定预加载脚本的路径
      preload: join(__dirname, '../preload/index.js'),
      // 禁用沙箱模式
      sandbox: false
    }
  });

  // 当窗口准备好显示时，调用 show 方法显示窗口
  mainWindow.on('ready-to-show', () => {
    mainWindow.show();
  });

  // 设置窗口打开处理程序，当在窗口中尝试打开新链接时，使用系统默认浏览器打开
  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url);
    return { action: 'deny' };
  });

  // 根据开发环境加载不同的页面
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    // 开发环境下，加载远程 URL
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']);
  } else {
    // 生产环境下，加载本地 HTML 文件
    mainWindow.loadFile(join(__dirname, '../renderer/index.html'));
  }
}

// 当 Electron 完成初始化并准备好创建浏览器窗口时，执行以下代码
app.whenReady().then(() => {
  // 设置应用程序的用户模型 ID，用于 Windows 系统
  electronApp.setAppUserModelId('com.electron');

  // 监听 browser-window-created 事件，为新创建的窗口设置快捷键监听
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window);
  });

  // 监听 IPC 消息 'ping'，当收到该消息时，在控制台输出 'pong'
  ipcMain.on('ping', () => console.log('pong'));

  // 创建系统托盘图标
  const tray = new Tray(join(__dirname, '../../resources/icon_16x16.png'));
  // 创建系统托盘图标右键菜单
  const contextMenu = Menu.buildFromTemplate([
    { label: '打开', click: () => mainWindow.show() },
    { label: '关闭', click: () => mainWindow.hide() },
    { label: '退出', click: () => app.quit() }
  ]);
  // 设置系统托盘图标悬停提示信息
  tray.setToolTip('Electron应用');
  // 设置系统托盘图标右键菜单
  tray.setContextMenu(contextMenu);


  // 调用 createWindow 函数创建主窗口
  createWindow();

  // 监听 activate 事件，在 macOS 上，当应用程序图标被点击且没有其他窗口打开时，重新创建窗口
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// 监听 window-all-closed 事件，当所有窗口关闭时，除了 macOS 系统，其他系统退出应用程序
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

// 在这个文件中，你可以包含应用程序主进程的其他特定代码。
// 你也可以将它们放在单独的文件中，并在这里引入。
